package com.yanggu.scala.chapater09.implicitObject

//隐式对象和隐式参数、隐式值类似, 相当于一个默认值
object ImplicitObjectDemo01 {

  def main(args: Array[String]): Unit = {
    trait S1 {
      def fun(): Unit
    }

    //隐式对象不能是顶级对象, 必须要在其他类或者对象中
    implicit object S2 extends S1 {
      override def fun(): Unit = println("Spark")
    }

    def g(arg1: String)(implicit arg2: S1): Unit = {
      println(s"隐式对象的解析!!!, 参数: $arg1")
      arg2.fun()
    }

    g("Scala")(() => println("不是隐式对象"))

    //这里隐式对象S2在这里当做隐式值使用
    g("Scala")
  }

}
